/*
 * @(#)VsnetUtils.java
 *
 * Copyright 2002-2003 JIDE Software. All rights reserved.
 */
package com.element.plaf.eclipse;

import java.awt.*;

/**
 *
 */
public class EclipseUtils {

	static Color getLighterColor(Color backColor) {
		int r = getLighterColor(backColor.getRed());
		int g = getLighterColor(backColor.getGreen());
		int b = getLighterColor(backColor.getBlue());
		if (r >= 255) r = 255;
		if (g >= 255) g = 255;
		if (b >= 255) b = 255;
		return new Color(r, g, b);
	}

	static int getLighterColor(int x) {
		return (int) (x * 36.0 / 255.0 + 219.5);
	}


	static Color getMenuSelectionColor(Color backColor) {
		int r = getMenuSelectionValue(backColor.getRed());
		int g = getMenuSelectionValue(backColor.getGreen());
		int b = getMenuSelectionValue(backColor.getBlue());
		if (r >= 255) r = 255;
		if (g >= 255) g = 255;
		if (b >= 255) b = 255;
		return new Color(r, g, b);
	}

	static int getMenuSelectionValue(int x) {
		return (int) (x * 76.0 / 255.0 + 179.5);
	}

	static Color getMenuBackgroundColor(Color backColor) {
		int r = getMenuValue(backColor.getRed());
		int g = getMenuValue(backColor.getGreen());
		int b = getMenuValue(backColor.getBlue());
		if (r >= 255) r = 255;
		if (g >= 255) g = 255;
		if (b >= 255) b = 255;
		return new Color(r, g, b);
	}

	static int getMenuValue(int x) {
		return (int) (x * 36.0 / 255.0 + 219.5);
	}

	static Color getDefaultBackgroundColor(Color backColor) {
		Color backIDE;

		// Check for the 'Classic' control color
		if ((backColor.getRed() == 212) && (backColor.getGreen() == 208) && (backColor.getBlue() == 200)) {
			// Use the exact background for this color
			backIDE = new Color(247, 243, 233);
		} else if ((backColor.getRed() == 236) && (backColor.getGreen() == 233) && (backColor.getBlue() == 216)) {
			// Check for the 'XP' control color
			// Use the exact background for this color
			backIDE = new Color(255, 251, 233);
		} else {
			// Calculate the IDE background color as only half as dark as the control color
			int r = backColor.getRed() + 35;
			int g = backColor.getGreen() + 35;
			int b = backColor.getBlue() + 35;
			if (r >= 255) r = 255;
			if (g >= 255) g = 255;
			if (b >= 255) b = 255;
			backIDE = new Color(r, g, b);
		}

		return backIDE;
	}

	private static final BasicStroke DOTTED_STROKE = new BasicStroke(1.0f, BasicStroke.CAP_SQUARE,
			BasicStroke.JOIN_ROUND, 1.0f, new float[]{0, 2, 0, 2}, 0);

	public static void fillRectWithHatch(Graphics2D g, Rectangle rect, Color color) {
		Stroke oldStroke = g.getStroke();

		g.setColor(Color.white);
		g.fillRect(rect.x, rect.y, rect.width, rect.height);

		g.setColor(color);
		g.setStroke(DOTTED_STROKE);

		for (int i = 0; i < rect.width; i++) {
			if (i % 2 == 0) {
				g.drawLine(rect.x + i, rect.y, rect.x + i, rect.y + rect.height - 1);
			} else {
				g.drawLine(rect.x + i, rect.y + 1, rect.x + i, rect.y + rect.height - 1);
			}
		}
		g.setStroke(oldStroke);
	}

	static final double RATIO1 = 0.67;
	static final double RATIO2 = 0.78;
	static final double RATIO3 = 0.86;

	static int getLightColor(int x, double ratio) {
		return (int) ((255 - x) * ratio + x);
	}

	static Color getLighterColor(Color backColor, double ratio) {
		int r = getLightColor(backColor.getRed(), ratio);
		int g = getLightColor(backColor.getGreen(), ratio) + 1;
		int b = getLightColor(backColor.getBlue(), ratio);
		if (r >= 255) r = 255;
		if (g >= 255) g = 255;
		if (b >= 255) b = 255;
		return new Color(r, g, b);
	}

	static Color getSelectedAndFocusedButtonColor(Color backColor) {
		return getLighterColor(backColor, RATIO1);
	}

	static Color getFocusedButtonColor(Color backColor) {
		return getLighterColor(backColor, RATIO2);
	}

	static Color getSelectedButtonColor(Color backColor) {
		return getLighterColor(backColor, RATIO3);
	}
}
